package top.bigdata.service.api;

import java.util.List;
import java.util.function.Supplier;
import java.util.function.Consumer;

public interface ResultService {
    /**
     * 缓存查询
     *
     * @param id       查询名
     * @param analyzer 缓存不存在时的分析方法
     * @param clazz    返回值类型
     */
    <T> T cachedQuery(String id, Supplier<T> analyzer, Class<T> clazz);

    /**
     * 缓存查询
     * @param id       查询名
     * @param analyzer 缓存不存在时的分析方法
     * @param elementClass 列表元素类型
     */
    <T> List<T> cachedQueryList(String id, Supplier<List<T>> analyzer, Class<T> elementClass);

    /**
     * 缓存查询
     * @param id       缓存名
     * @param analyzer 缓存不存在时的分析方法
     * @param resultHandler 分析结果的处理方法
     * @param elementClass 列表元素类型
     */
    <T> List<T> cachedQueryList(String id, Supplier<List<T>> analyzer, Consumer<List<T>> resultHandler, Class<T> elementClass);
}
